#ifndef __COMMAND_LINE_OPTIONS_H__
#define __COMMAND_LINE_OPTIONS_H__

#include <vector>
#include <string>

namespace cshotel {
    class CommandLineOptions {
    public:
        enum OutputFormat {
            PanoramaFile,
            SeaDragon,
            TransformedFiles,
            UnknownOutputFormat
        };
        
        enum OutputRenderer {
            OpenCV,
            Enblend,
            VisionWorkbench,
            UnknownOutputRenderer
        };
        
        static CommandLineOptions& getInstance();
       
        void initialize(int argc, char** argv);
        const std::vector<std::string>& getInputFileNames();
        int getMaximumMatchingVersionImageSize();
        OutputFormat getOutputFormat();
        OutputRenderer getOutputRenderer();
        std::string getWorkingDirectory();
        bool getContinueProgram();
        std::string getOutputName();
        std::string getEnblendOptions();
        std::string getDeepZoomConverterJar();
        std::string getDeepZoomConverterOptions();
        std::string getJavaOptions();
        bool getCreateThumbnail();
        std::string getThumbnailSuffix();
        int getThumbnailSize();
        bool getGenerateDebugImages();
    
    private:
        std::vector<std::string> inputFileNames;
        int maximumMatchingVersionImageSize;
        OutputFormat outputFormat;
        OutputRenderer outputRenderer;
        std::string workingDirectory;
        bool continueProgram;
        std::string outputName;
        std::string enblendOptions;
        std::string deepZoomConverterJar;
        std::string javaOptions;
        std::string deepZoomConverterOptions;
        bool createThumbnail;
        std::string thumbnailSuffix;
        int thumbnailSize;
        bool generateDebugImages;
        
        CommandLineOptions();
        
        OutputFormat parseOutputFormat(std::string input);
        OutputRenderer parseOutputRenderer(std::string output);
        
        const static int defaultMaximumMatchingVersionImageSize = 400;
    };
}

#endif
